package cn.yearndr.zfsy.zfsy.service;

import com.alibaba.fastjson.JSON;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;
import java.util.Random;


public class GetWeather {
    private static String weatherUrl = "http://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=";

    /**
     * 通过ip地址查询地点并返还天气数据
     * @param ip
     * @return 未来5天天气数据集合
     */
    public static ArrayList<ArrayList> getWeatherByIP(String ip) {
        String city = GetWeather.getCity(ip);
        String userAgent = UserAgentUtil.getUserAgents();
        ArrayList<ArrayList> arrayLists = new ArrayList<>();
        try {
            Document doc = Jsoup.connect(weatherUrl+city+"天气").userAgent(userAgent).timeout(5000).get();
            Elements a = doc.getElementsByClass("op_weather4_twoicon").get(0).getElementsByTag("a");

            for (Element element : a) {
                ArrayList<String> arrayList = new ArrayList<>();

                String quality = "";
                String current = "";
                String today = "";

                //只有当天才有实时温度
                if (!element.getElementsByClass("op_weather4_twoicon_shishi_title").isEmpty()) {
                    current = element.getElementsByClass("op_weather4_twoicon_shishi_title").text();
                }
                //空气质量
                if (!element.getElementsByClass("op_weather4_twoicon_aqi_text_today").isEmpty()) {
                    quality = element.getElementsByClass("op_weather4_twoicon_aqi_text_today").text();
                }else {
                    quality = element.getElementsByClass("op_weather4_twoicon_aqi_text").text();
                }
                //日期
                if (!element.getElementsByClass("op_weather4_twoicon_date").isEmpty()) {
                    today = element.getElementsByClass("op_weather4_twoicon_date").text();
                }else {
                    today = element.getElementsByClass("op_weather4_twoicon_date_day").text();
                }
                //风
                String wind = element.getElementsByClass("op_weather4_twoicon_wind").text();
                //天气
                String weath = element.getElementsByClass("op_weather4_twoicon_weath").text();
                //气温
                String temp = element.getElementsByClass("op_weather4_twoicon_temp").text();

                arrayList.add(quality);
                arrayList.add(current);
                arrayList.add(today);
                arrayList.add(wind);
                arrayList.add(weath);
                arrayList.add(temp);
                arrayLists.add(arrayList);

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return arrayLists;
    }

    public static String getCity(String ip){
        //淘宝ip地区获取api JSON http://ip.taobao.com/service/getIpInfo.php?ip=xx.xx.xx.xx
        //会报502  偶尔正常
        //苏宁 接口http://ipservice.suning.com/ipQuery.do?ip=
        //正常 速度快

        String url = ("http://ipservice.suning.com/ipQuery.do?ip="+ip);
        String body = HttpRequestService.client(url);
        Map maps = (Map) JSON.parse(body);
//        String dataValue = "";
        String city = "";
//        for (Object map : maps.entrySet()){
//            if (((Map.Entry)map).getKey() == "data"){
//                dataValue = ((Map.Entry)map).getValue().toString();
//            }
//        }

//        maps = (Map)JSON.parse(dataValue);
        for (Object map : maps.entrySet()){
            if (((Map.Entry)map).getKey() == "cityName"){
                city = ((Map.Entry)map).getValue().toString();
            }
        }
        return city;
    }
}

class UserAgentUtil {

    private static final String[] USER_AGENTS = {
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
            "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
            "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
            "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
            "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
            "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
            "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
            "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
            "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52"
    };


    public static String getUserAgents() {
        Random random = new Random();
        int index = random.nextInt(USER_AGENTS.length);
        return USER_AGENTS[index];
    }

    public static String getUserAgents(int index) {
        if (index < 0 || index > USER_AGENTS.length) {
            return getUserAgents();
        }
        return USER_AGENTS[index];
    }

}

